Problem
算术天才⑨与等差数列
Description
算术天才⑨非常喜欢和等差数列玩耍。
有一天,他给了你一个长度为的序列,其中第个数为。
他想考考你,每次他会给出询问,问区间内的数从小到大排序后能否形成公差为的等差数列。
当然,他还会不断修改其中的某一项。
为了不被他鄙视,你必须要快速并正确地回答完所有问题。
注意:只有一个数的数列也是等差数列。
Input
第一行包含两个正整数,分别表示序列的长度和操作的次数。
第二行包含个整数,依次表示序列中的每个数。
接下来行,每行一开始为一个数,
若,则接下来两个整数,表示把修改为。
若,则接下来三个整数,表示一个询问。
在本题中,都是经过加密的,都需要异或你之前输出的Yes
的个数来进行解密。
Output
输出若干行,对于每个询问,如果可以形成等差数列,那么输出Yes
,否则输出No
。
Sample Input
1 | 5 3 |
Sample Output
1 | No |
标签:线段树
set
Solution
线段树判断等差数列,单点修改。
若区间组成等差数列,则一定有:
- 没有重复的数
其中若存在的情况要单独处理。
对于第一、三个条件,用线段树存储区间即可。
对于第二个条件,需要在外面用维护每个位置的值上一次出现在哪个位置,将这个位置存入线段树中,区间求,若最大值小于,则一定没有重复的数。
注意修改时不止当前位置的前驱会发生变化,所以需要多次更新。
Code
1 |
|